//
//  CZStatusListViewModel.swift
//  WeiBo
//
//  Created by Apple on 16/9/6.
//  Copyright © 2016年 KY. All rights reserved.
//

import UIKit
//  封装首页网络请求
class CZStatusListViewModel: NSObject {

    //  提供数据源
    lazy var statusList: [CZStatusViewModel] = [CZStatusViewModel]()
    //  请求微博数据
    func loadData(isPullup: Bool, callBack: @escaping (Bool, String)->()) {
        //  上拉加载的默认值为0
        var maxId: Int64 = 0
        //  下拉刷新的默认值为0
        var sinceId: Int64 = 0
        if isPullup {
            //  上拉请求微博id改成数组的最后一条微博id去请求数据
            maxId = statusList.last?.status?.id ?? 0
            
            //  解决数据重复问题
            if maxId > 0 {
                maxId -= 1
            }
            
        } else {
            //  下拉刷新或者第一次请求
            sinceId = statusList.first?.status?.id ?? 0
        }
        
        //  查询本地缓存数据
        let result = CZStatusDAL.queryCacheData(maxid: maxId, sinceid: sinceId)
        print(result.count)
        var message = "没有加载到最新得微博数据"
        
        CZStatusDAL.loadData(maxId: maxId, sinceId: sinceId) { (dicArray) in
           
            
            //  遍历字典完成字典转转模型
            var tempArray: [CZStatusViewModel] = [CZStatusViewModel]()
            for dic in dicArray {
                
                let status = CZStatus(dic: dic)
                let statusViewModel = CZStatusViewModel(status: status)
                tempArray.append(statusViewModel)
            }
            print("-------")
            print(tempArray.count)
            print("-------")
            
            
            //  保存数据，更新UI,当前闭包是逃离的需要使用self指定作用域
            if isPullup {
                //  上拉加载数据追加到原始数组的后面
                self.statusList.append(contentsOf: tempArray)
            } else {
                //  下拉刷新，数据插入到第一个位置
                self.statusList.insert(contentsOf: tempArray, at: 0)
            }
            
            if tempArray.count > 0 {
                message = "加载了\(tempArray.count)条微博数据"
            }
            //  通知主界面更新数据
            callBack(true, message)
        }
    }
}
